SPSS SELECT IF 命令教程与示例
By Ruben Geert van den Berg under Basics & SPSS A-Z
快速概览
在 SPSS 中,SELECT IF
命令永久性地从你的数据中移除满足特定条件的个案(行)。
概要
SPSS 中的 SELECT IF
命令基本上意味着“删除所有不满足一个或多个条件的个案”。例如,select if(gender = 'female').
将永久删除所有性别不是女性的个案。现在,让我们使用 bank_clean.sav 文件(部分内容如下所示)来演练一些实际示例。
示例 1 - 基于 1 个变量的选择
首先,让我们删除所有没有至少本科学位的个案。以下是 语法 (syntax):
- 检查教育程度的频率分布;
- 删除不需要的个案;
- 检查结果。
***在新的输出表中显示值和值标签。**
set tnumbers both.
***运行最小频率表。**
frequencies educ.
***选择具有学士或更高学位的个案。删除所有其他个案。**
select if(educ >= 4).
***重新检查频率。**
frequencies educ.
结果
正如我们所看到的,现在我们的数据只包含具有学士、硕士或博士学位的个案。重要的是,在教育程度上具有以下情况的个案也被从数据中删除:
示例 2 - 基于 2 个变量的选择
以下语法根据性别和教育程度选择个案:我们只保留数据中至少具有本科学位的女性受访者。
***检查性别和教育程度的列联表。**
crosstabs educ by gender.
***选择具有学士或更高学位的女性。**
select if(gender = 0 & educ >= 4).
***重新检查列联表。**
crosstabs educ by gender.
结果
示例 3 - 基于(非)缺失值的选择
如果你掌握了 SPSS 缺失值函数 (SPSS Missing Values Functions),则基于(非)缺失值的选择非常简单。例如,以下语法显示了两种删除在最后 10 个变量(overall 到 q9)上有效值少于 7 个的个案的选项。
***从最后 10 个问题中选择至少有 7 个非缺失值的个案。**
select if(nvalid(overall to q9) >= 7). /*至少 7 个有效值或最多 3 个缺失值。*/
execute.
***另一种方式,结果完全相同。**
select if(nmiss(overall to q9) < 4). /*少于 4 个缺失值或多于 6 个有效值。*/
execute.
技巧 1 - 删除前检查选择
在删除个案之前,我有时想快速查看它们。一个好的方法是创建一个 FILTER (FILTER) 变量。以下语法显示了正确的方法。
***创建只包含零的筛选变量。**
compute filt_1 = 0.
***将筛选变量设置为 1,以表示我们希望保留在数据中的个案。**
if(nvalid(overall to q9) >= 7) filt_1 = 1.
***将未选中的个案移动到数据集的底部。**
sort cases by filt_1 (d).
***现在滚动到数据集的底部。请注意,个案 459 - 464 将被删除,因为它们在 filt_1 上有 0。**
***如果选择符合预期,则删除其他个案。**
select if(filt_1).
execute.
快速说明:select if(filt_1).
是 select if(filt_1 <> 0).
的简写,并删除在 filt_1
上具有零或缺失值的个案。
结果
将被删除的个案位于我们数据的底部。我们也很容易看到,在执行此操作后,我们将剩下 458 个个案。
技巧 2 - 使用 TEMPORARY
我想提到的最后一个技巧是将 SELECT IF
与 TEMPORARY
结合使用。这样做,SELECT IF
仅适用于随后的第一个过程。例如,比较以下第一个和第二个 FREQUENCIES (FREQUENCIES) 命令的结果。
***确保个案删除仅适用于第一个过程。**
temporary.
***仅选择女性个案。**
select if(gender = 0).
***现在任何过程都只使用女性个案。这也反转了个案选择。**
frequencies gender educ.
***重新运行频率现在再次使用数据中的所有个案。**
frequencies gender educ.
最终说明
首先,语法中条件周围的括号不是必需的。因此,select if(gender = 0).
也可以写成 select if gender = 0.
。我曾经认为较短的语法总是更好,但这些年来我改变了我的想法。可读性和清晰的结构也很重要。因此,我使用(并推荐)条件周围的括号。这也适用于 IF (IF) 和 DO IF (DO IF)。
好吧,我想这应该可以了。我错过了什么吗?请在下面留言告诉我。
感谢阅读!